#ifndef _BSP_IO_H_
#define _BSP_IO_H_
#include "bsp_include.h"

#define GPIO_WRITE					HAL_GPIO_WritePin
#define GPIO_READ					HAL_GPIO_ReadPin
#define IO_SET						GPIO_PIN_SET
#define IO_RESET					GPIO_PIN_RESET

#define OPEN						1
#define CLOSE						0

/* 运行指示灯 */
#define IO_MCU_LED_PORT				GPIOC
#define IO_MCU_LED_PIN				GPIO_PIN_15
#define MCU_LED(x)					GPIO_WRITE(IO_MCU_LED_PORT, IO_MCU_LED_PIN, x?IO_RESET:IO_SET);

/* 蜂鸣器 */
#define IO_BEEP_PORT				GPIOD
#define IO_BEEP_PIN					GPIO_PIN_1
#define BEEP(x)						GPIO_WRITE(IO_BEEP_PORT, IO_BEEP_PIN, x?IO_SET:IO_RESET);

 /* DS18B20 */
 #define IO_DS18B20_PORT             GPIOB
 #define IO_DS18B20_PIN              GPIO_PIN_9
 #define IO_DS18B20_SET()            GPIO_WRITE(IO_DS18B20_PORT, IO_DS18B20_PIN, IO_SET);
 #define IO_DS18B20_RESET()          GPIO_WRITE(IO_DS18B20_PORT, IO_DS18B20_PIN, IO_RESET);
 #define IO_DS18B20_READ()           (GPIO_READ(IO_DS18B20_PORT, IO_DS18B20_PIN))

/* 按键1 */
#define IO_KEY1_PORT          		GPIOB
#define IO_KEY1_PIN           		GPIO_PIN_5

/* 按键2 */
#define IO_KEY2_PORT          		GPIOB
#define IO_KEY2_PIN           		GPIO_PIN_4

/* 按键3 */
#define IO_KEY3_PORT          		GPIOB
#define IO_KEY3_PIN           		GPIO_PIN_3

/* 按键4 */
#define IO_KEY4_PORT          		GPIOD
#define IO_KEY4_PIN           		GPIO_PIN_3

/* 按键5 */
#define IO_KEY5_PORT          		GPIOD
#define IO_KEY5_PIN           		GPIO_PIN_2

#define IO_KEY_GET(x,y)				(GPIO_READ(x, y)?0:1)

/* 行程开关 冷藏区域 */
#define IO_BTN_COLD_PORT            GPIOD
#define IO_BTN_COLD_PIN             GPIO_PIN_0

/* 行程开关 储物区 */
#define IO_BTN_SAVE_PORT            GPIOA
#define IO_BTN_SAVE_PIN             GPIO_PIN_11

#define IO_BTN_GET(x,y)				(GPIO_READ(x, y)?0:1)

/* 照明 冷藏区域 */
#define IO_COLD_IND_PORT			GPIOA
#define IO_COLD_IND_PIN				GPIO_PIN_15
#define COLD_IND(x)					GPIO_WRITE(IO_COLD_IND_PORT, IO_COLD_IND_PIN, x?IO_SET:IO_RESET);

/* 照明 储物区 */
#define IO_SAVE_IND_PORT			GPIOA
#define IO_SAVE_IND_PIN				GPIO_PIN_12
#define SAVE_IND(x)					GPIO_WRITE(IO_SAVE_IND_PORT, IO_SAVE_IND_PIN, x?IO_SET:IO_RESET);

/* 指示灯 储物区空报警 */
#define IO_ERR_LED_PORT			    GPIOA
#define IO_ERR_LED_PIN 				GPIO_PIN_10
#define ERR_LED(x)					GPIO_WRITE(IO_ERR_LED_PORT, IO_ERR_LED_PIN, x?IO_RESET:IO_SET);

/* 热释电 人体检测 */
#define IO_PIR_PORT                 GPIOA
#define IO_PIR_PIN                  GPIO_PIN_5
#define IO_PIR_GET()				(GPIO_READ(IO_PIR_PORT, IO_PIR_PIN)?1:0)

/* 制冷片 冷藏区域 */
#define IO_COLD_RELAY_PORT			GPIOB
#define IO_COLD_RELAY_PIN			GPIO_PIN_8
#define COLD_RELAY(x)				GPIO_WRITE(IO_COLD_RELAY_PORT, IO_COLD_RELAY_PIN, x?IO_SET:IO_RESET);

void bsp_ds18b20_output(void);
void bsp_ds18b20_input(void);

#endif /* _BSP_IO_H_ */
